package util;

import util.KelimeTr;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import net.zemberek.bilgi.kokler.KokAdayiBulucuUretici;
import net.zemberek.bilgi.kokler.Sozluk;
import net.zemberek.yapi.KelimeTipi;
import net.zemberek.yapi.Kok;

public class SozlukTr implements Sozluk {
	private String filePath = ".\\data\\sozluk.txt";
	private String delimiter = " ";
	private int wordCountInLine = 1;
	private int sozcukIndx = 1;

	private ArrayList<KelimeTr> kelimeler = new ArrayList<KelimeTr>();
	/*
	 * Girdi olarak verilen Stringin sözlüktedi Attribute'larını getirir.
	 */
	public KelimeTr getKelime (String klm){
	
		// Sözlükten kelime getirilir.
		for(KelimeTr iKelime : kelimeler) {
		    if(iKelime.getContent() != null && iKelime.getContent().equals(klm)) {
		        //
		        System.out.println("INFO: Aranan Kelime: ("+iKelime.getContent() + ") Sözlükte bulundu"); 
		        return iKelime;
		     }
		}
		return null;	
	}
	
	public boolean contains(Object element){
		return false;		
	}
	
	public SozlukTr() {
		
		kelimeler = sozlukOkuStr();
		System.out.println("INFO: Defaul değerler ile sozluk oluşturuldu");
	}

	public SozlukTr(String filePath) {
		// TODO Auto-generated constructor stub
		setFilePath(filePath);
		kelimeler = sozlukOkuStr();
		System.out.println("INFO: " + filePath.toString()
				+ " dosyası ile sozluk oluşturuldu");
	}

	public SozlukTr(String filePath, String delimiter, int wordCountInLine,
			int sozcukIndx) {
		// TODO Auto-generated constructor stub
		setFilePath(filePath);
		setDelimiter(delimiter);
		setWordCountInLine(wordCountInLine);
		setSozcukIndx(sozcukIndx);

		kelimeler = sozlukOkuStr();
	}
	/* 
	 * Bu constructtır TKD imla klavuzu icin yazılmıştır
	 * Aranan kelime öbeğini Yumuşama yapıp yapmadığını belirler 
	*/ 
	public SozlukTr(String filePath, String delimiter, int wordCountInLine,
			int sozcukIndx,boolean isSozlukTypeTDK) {
		setFilePath(filePath);
		setDelimiter(delimiter);
		setWordCountInLine(wordCountInLine);// TODO TDK sozlukda ise yaramaz
		setSozcukIndx(sozcukIndx);

		kelimeler = TDKsozlukOkuStr();
	}
	/* 
	 * TDK Sözlük okuma yapar ve "kelimeler" Listesine alır
	 */
	private ArrayList<KelimeTr> TDKsozlukOkuStr() {
		String line = null;
		KelimeTr klm = null;
		try {
			BufferedReader reader = new BufferedReader(new FileReader(filePath));

			String delimiter = getDelimiter();
			while ((line = reader.readLine()) != null) {
				if (line.startsWith("#") || line.trim().length() == 0) continue;
				String[] sozcukler = new String[10];
				if(line.contains(delimiter)){
					sozcukler = line.split(delimiter);

					klm = new KelimeTr(sozcukler[0].toString());
					if(line.contains(",-")){
						klm.setYumusamaYapar(true);
					}
					kelimeler.add(klm);					
				}else {
					klm = new KelimeTr(line.toString());
					kelimeler.add(klm);
					
				}

			}
			reader.close();
		} catch (IOException e) {
			System.out
					.println("ERR:Sözlük dosyası bulunamadı veya okuma hatası");
			e.printStackTrace();
		}
		return kelimeler;
	}
	
	
	private ArrayList<KelimeTr> sozlukOkuStr() {
		String line = null;
		KelimeTr klm = null;
		try {
			BufferedReader reader = new BufferedReader(new FileReader(filePath));

			int sozcukIndx = getSozcukIndx();
			String delimiter = getDelimiter();
			while ((line = reader.readLine()) != null) {
				if ( line.trim().length() == 0) continue; //sonradan eklendi
				if (line.startsWith("#") ) continue; //sonradan eklendi

				String[] sozcukler = new String[10];
				sozcukler = line.split(delimiter);
				if (sozcukler.length == wordCountInLine) {
					klm = new KelimeTr(sozcukler[sozcukIndx - 1].toString());
					kelimeler.add(klm);
				} else {
					System.out.println("ERR: Dosya formatı veya kelime formatı uygun değil");
				}
			}
			reader.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out
					.println("ERR:Sözlük dosyası bulunamadı veya okuma hatası");
			e.printStackTrace();
		}
		return kelimeler;
	}
	public  boolean KokSozlukteVarMi(String str) {
		// TODO Auto-generated method stub
		KelimeTr tempKlm=new KelimeTr(str);
		if (kelimeler.contains(tempKlm)){
			return true;
		}else {
			return false;
		}		
	}
	public int getWordCountInLine() {
		return wordCountInLine;
	}
	
	public void setWordCountInLine(int wordCountInLine) {
		this.wordCountInLine = wordCountInLine;
	}
	
	public String getDelimiter() {
		return delimiter;
	}
	
	public void setDelimiter(String delimiter) {
		this.delimiter = delimiter;
	}
	
	public String getFilePath() {
		return filePath;
	}
	
	public void setFilePath(String filePath) {
		this.filePath = filePath;
	}
	
	public int getSozcukIndx() {
		return sozcukIndx;
	}
	
	public void setSozcukIndx(int sozcukIndx) {
		this.sozcukIndx = sozcukIndx;
	}

	@Override
	public List<Kok> kokBul(String str) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Kok kokBul(String str, KelimeTipi tip) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Collection<Kok> tumKokler() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void ekle(Kok kok) {
		// TODO Auto-generated method stub

	}

	@Override
	public KokAdayiBulucuUretici kokBulucuFactory() {
		// TODO Auto-generated method stub
		return null;
	}




}
